home *** CD-ROM | disk | FTP | other *** search
/ PC Elektro 3 / PC-Elektro-3-cd1.bin / KBan 2.0 / KBANSRC.LZH / SRC / PROG / KBANDATA / LAYER.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-07  |  3.5 KB  |  177 lines

  1. // the implementation of class LAYER
  2. // Copyright (C) 1996 Kazutaka Hirata <khirata@jove.acs.unt.edu>
  3.  
  4. #include "file.h"
  5.  
  6. #include "../intstr.h"
  7.  
  8. #include "layer.h"
  9.  
  10. enum KIND_ITEM {
  11.   KIND_PIN,
  12.   KIND_LINE,
  13.   KIND_UNKNOWN
  14. };
  15.  
  16. static const INTSTR_ELEMENT kind_str_table[] = {
  17. {KIND_PIN    , "pin" },
  18. {KIND_LINE   , "line"},
  19. {KIND_UNKNOWN, NULL  }
  20. };
  21.  
  22. void LAYER::operator=(const LAYER& src)
  23. {
  24.   m_pin_list  = src.m_pin_list ;
  25.   m_line_list = src.m_line_list;
  26. }
  27.  
  28. void LAYER::clear()
  29. {
  30.   m_pin_list .clear();
  31.   m_line_list.clear();
  32. }
  33.  
  34. XY LAYER::get_max() const
  35. {
  36.   return ::get_max(m_pin_list.get_max(), m_line_list.get_max());
  37. }
  38.  
  39. XY LAYER::get_min() const
  40. {
  41.   return ::get_min(m_pin_list.get_min(), m_line_list.get_min());
  42. }
  43.  
  44. void LAYER::shift(const XY& ac_dif, LAYER& target) const
  45. {
  46.   m_pin_list .shift(ac_dif, target.m_pin_list );
  47.   m_line_list.shift(ac_dif, target.m_line_list);
  48. }
  49.  
  50. void LAYER::unselect()
  51. {
  52.   m_pin_list .unselect();
  53.   m_line_list.unselect();
  54. }
  55.  
  56. void LAYER::select_items_in_block(const XY& ac1, const XY& ac2)
  57. {
  58.   m_pin_list .select_items_in_block(ac1, ac2);
  59.   m_line_list.select_items_in_block(ac1, ac2);
  60. }
  61.  
  62. void LAYER::collect_selected_items(LAYER& dst) const
  63. {
  64.   m_pin_list .collect_selected_items(dst.m_pin_list );
  65.   m_line_list.collect_selected_items(dst.m_line_list);
  66. }
  67.  
  68. void LAYER::remove_selected_items()
  69. {
  70.   m_pin_list .remove_selected_items();
  71.   m_line_list.remove_selected_items();
  72. }
  73.  
  74. void LAYER::operator+=(const LAYER& target)
  75. {
  76.   m_pin_list .add(target.m_pin_list );
  77.   m_line_list.add(target.m_line_list);
  78. }
  79.  
  80. void LAYER::load_200a8(FILE_NEW& fp)
  81. {
  82.   for(;;) {
  83.     char str[1024];
  84.     fp.gets_wo_return(str, 1024);
  85.     if(!strcmp(str, "end")) {
  86.       break;
  87.     } else {
  88.       INTSTR_TABLE table(kind_str_table, KIND_UNKNOWN);
  89.       KIND_ITEM kind = (KIND_ITEM)table.get_no(str);
  90.       switch(kind) {
  91.         case KIND_PIN : {
  92.           m_pin_list.load(fp);
  93.           break;
  94.         }
  95.         case KIND_LINE : {
  96.           m_line_list.load(fp);
  97.           break;
  98.         }
  99.         default : {
  100.           break;
  101.         }
  102.       }
  103.     }
  104.   }
  105. }
  106.  
  107. uint LAYER::load_get_version(FILE_NEW& fp) const
  108. {
  109.   FILE_VERSION fver;
  110.   char str[1024];
  111.   fp.gets_wo_return(str, 1024);
  112.   return fver.get_version_no(str);
  113. }
  114.  
  115. int LAYER::load(FILE_NEW& fp)
  116. {
  117.   typedef void (LAYER::*LOAD_FUNC)(FILE_NEW& fp);
  118.   LOAD_FUNC load_func;
  119.   int retval;
  120.  
  121.   uint version = load_get_version(fp);
  122.   switch(version) {
  123.     case FILE_VERSION::VERSION_200A8 : {
  124.       load_func = &LAYER::load_200a8;
  125.       break;
  126.     }
  127.     default : {
  128.       load_func = NULL;
  129.       break;
  130.     }
  131.   }
  132.   if(load_func != NULL) {
  133.     (this->*load_func)(fp);
  134.     retval = true;
  135.   } else {
  136.     retval = false;
  137.   }
  138.   return retval;
  139. }
  140.  
  141. int LAYER::save(FILE_NEW& fp) const
  142. {
  143.   FILE_VERSION fver;
  144.   fp.printf("%s\n", fver.get_version_str(FILE_VERSION::VERSION_200A8));
  145.  
  146.   fp.puts("pin\n");
  147.   m_pin_list.save(fp);
  148.  
  149.   fp.puts("line\n");
  150.   m_line_list.save(fp);
  151.  
  152.   fp.puts("end\n");
  153.   return true;
  154. }
  155.  
  156. void LAYER::collect_aperture(APT_TABLE& apt_pin_table, APT_TABLE& apt_line_table) const
  157. {
  158.   m_pin_list .collect_aperture(apt_pin_table );
  159.   m_line_list.collect_aperture(apt_line_table);
  160. }
  161.  
  162. bool LAYER::empty() const
  163. {
  164.   return m_pin_list.empty() && m_line_list.empty();
  165. }
  166.  
  167. void LAYER::rotate_90()
  168. {
  169.   m_pin_list .rotate_90();
  170.   m_line_list.rotate_90();
  171. }
  172.  
  173. void LAYER::limit_drill_size(uint drill)
  174. {
  175.   m_pin_list.limit_drill_size(drill);
  176. }
  177.